package co.fitstart.admin.service;

import java.util.Date;
import java.util.List;
import java.util.Map;
import com.demo2do.core.support.Page;

import co.fitstart.admin.entity.report.CoachFinishedScheduleReport;
import co.fitstart.admin.entity.report.FinishedCourseReportStatistics;
import co.fitstart.admin.entity.report.FinishedCourseSchedule;
import co.fitstart.admin.entity.report.HourUnitPrice;
import co.fitstart.admin.entity.report.RevenueReportStatistics;
import co.fitstart.admin.entity.report.SiteHour;
import co.fitstart.admin.entity.report.SiteHourStat;
import co.fitstart.admin.entity.report.StudentCourseRoundStat;
import co.fitstart.admin.entity.report.StudentUnitPrice;
import co.fitstart.admin.entity.report.TasteStatEveryDay;
import co.fitstart.admin.entity.report.TasteStatSingle;
import co.fitstart.admin.entity.report.UnfinishedRoundChange;
import co.fitstart.admin.entity.report.UnfinishedRoundReport;
import co.fitstart.admin.entity.search.SigninReportSearch;
import co.fitstart.entity.course.Course;
import co.fitstart.entity.course.CourseType;
import co.fitstart.entity.course.round.CourseRound;
import co.fitstart.entity.course.round.CourseRoundAttribute;
import co.fitstart.entity.course.round.CourseRoundResult;
import co.fitstart.entity.course.round.Goal;
import co.fitstart.entity.course.schedule.CourseSchedule;
import co.fitstart.entity.principal.Principal;
import co.fitstart.entity.report.FinishedCourseReport;
import co.fitstart.entity.report.RevenueReport;
import co.fitstart.entity.report.VisitorReport;
import co.fitstart.entity.site.Site;
import co.fitstart.entity.taste.TasteSignUp;
import co.fitstart.entity.taste.TasteStat;
import co.fitstart.entity.user.StudentTargetData;
import co.fitstart.entity.user.bwh.BwhRecord;
import co.fitstart.entity.user.inbody.InbodyRecord;

public interface ReportService {
    
    /**
     * 
     * @param site
     * @param date
     * @param period
     * @return
     */
    public List<RevenueReport> listRevenueReport(Site site, Date date, String period, Page page);
    
    /**
     * 
     * @param sites
     * @param date
     * @param period
     * @param page
     * @return
     */
    public List<RevenueReport> listRevenueReport(List<Site> sites, Date date, String period, Page page);
    
    /**
     * 
     * @param site
     * @param startDate
     * @param endDate
     * @return
     */
    public List<RevenueReport> listRevenueReport(Site site, Date startDate, Date endDate);
    
    /**
     * 
     * @param site
     * @param date
     * @param period
     * @return
     */
    public Map<String, Map<String, Map<String, Long>>> listRevenueReportStatistics(Site site, Date date, String period);
    
    /**
     * 
     * @param sites
     * @param date
     * @param period
     * @return
     */
    public  Map<String, Map<String, Map<String, Long>>> listRevenueReportStatistics(List<Site> sites, Date date, String period);
    
    /**
     * 
     * @param site
     * @param startDate
     * @param endDate
     * @return
     */
    public Map<String, Map<String, Map<String, RevenueReportStatistics>>> listRevenueReportStatistics(Site site, Date startDate, Date endDate);
    
    /**
     * 
     * @param sites
     * @param startDate
     * @param endDate
     * @return
     */
    public Map<String, Map<String, Map<String, RevenueReportStatistics>>> listRevenueReportStatistics(List<Site> sites, Date startDate, Date endDate);
    
    /**
     * 
     * @param statistics
     * @return
     */
    public Map<String, Long> getRevenueTotal(Map<String, Map<String, Map<String, RevenueReportStatistics>>> statistics);
    
    /**
     * 
     * @param site
     * @param date
     * @param period
     * @return
     */
    public Map<String, Long> getRevenueTotal(Site site, Date date, String period);
    
    /**
     * 
     * @param sites
     * @param date
     * @param period
     * @return
     */
    public Map<String, Long> getRevenueTotal(List<Site> sites, Date date, String period);
    
    /**
     * 
     * @param site
     * @param date
     * @param period
     * @return
     */
    public List<FinishedCourseReport> listFinishedCourseReport(Site site, Date date, String period, Page page);
    
    /**
     * 
     * @param site
     * @param startDate
     * @param endDate
     * @return
     */
    public Map<String, List<FinishedCourseReport>> listFinishedCourseReport(Site site, Date startDate, Date endDate);
    
    /**
     * 
     * @param site
     * @param date
     * @param period
     * @return
     */
    public Map<String, Map<String, FinishedCourseReportStatistics>> listFinishedCourseReportStatistics(Site site, Date date, String period);
    
    /**
     * 
     * @param sites
     * @param date
     * @param period
     * @return
     */
    public Map<String, Map<String, FinishedCourseReportStatistics>> listFinishedCourseReportStatistics(List<Site> sites, Date date, String period);
    
    /**
     * 
     * @param site
     * @param startDate
     * @param endDate
     * @return
     */
    public Map<String, Object> getFinishedScheduleTotal(Site site, Date startDate, Date endDate);
    
    /**
     * 
     * @param sites
     * @param startDate
     * @param endDate
     * @return
     */
    public Map<String, Object> getFinishedScheduleTotal(List<Site> sites, Date startDate, Date endDate);
    
    /**
     * 
     * @param site
     * @param startDate
     * @param endDate
     * @return
     */
    public Map<String, List<CoachFinishedScheduleReport>> listCoachFinishedScheduleReport(Site site, Date startDate, Date endDate);
    
    /**
     * 
     * @param sites
     * @param startDate
     * @param endDate
     * @return
     */
    public Map<String, List<CoachFinishedScheduleReport>> listCoachFinishedScheduleReport(List<Site> sites, Date startDate, Date endDate);
    
    /**
     * 
     * @param site
     * @param startDate
     * @param endDate
     * @return
     */
    public Map<Long, Long> getSiteFinishedScheduleStat(Site site, Date startDate, Date endDate);
    
    /**
     * 
     * @param sites
     * @param startDate
     * @param endDate
     * @return
     */
    public Map<Long, Long> getSiteFinishedScheduleStat(List<Site> sites, Date startDate, Date endDate);
    
    /**
     * 
     * @param site
     * @param startDate
     * @param endDate
     * @return
     */
    public List<FinishedCourseSchedule> listFinishedCourseSchedule(Site site, Date startDate, Date endDate);
    
    /**
     * 
     * @param sites
     * @param startDate
     * @param endDate
     * @return
     */
    public List<FinishedCourseSchedule> listFinishedCourseSchedule(List<Site> sites, Date startDate, Date endDate);
    
    /**
     * 
     * @param statistics
     * @param amount
     * @return
     */
    public Map<String, Long> getFinishedCourseTotal(List<Site> sites, Map<String, Map<String, FinishedCourseReportStatistics>> statistics, int amount);

    /**
     * 
     * @param site
     * @param date
     * @param period
     * @return
     */
    public Map<String, VisitorReport> listVisitorReport(Site site, Date date, String period);
    
    /**
     * 
     * @param sites
     * @param date
     * @param period
     * @return
     */
    public Map<String, VisitorReport> listVisitorReport(List<Site> sites, Date date, String period);
    
    /**
     * 
     * @param site
     * @param startDate
     * @param endDate
     * @return
     */
    public List<VisitorReport> listVisitorReport(Site site, Date startDate, Date endDate);
    
    /**
     * 
     * @param site
     * @param startDate
     * @param endDate
     * @return
     */
    public VisitorReport getVisitorReport(Site site, Date startDate, Date endDate);
    
    /**
     * 
     * @param reports
     * @return
     */
    public VisitorReport getVisitorReportStatistics(Map<String, VisitorReport> reports);
    
    /**
     * 
     * @param site
     * @param occurDate
     * @param visitAmount
     */
    public void editVisitAmount(Site site, Date occurDate, long visitAmount);
    
    /**
     * 
     * @return
     */
    public List<Long> listYearCourseId();

    /**
     * 
     * @param site
     * @param mobile
     * @param coach
     * @param from
     * @param to
     * @return
     */
    public Map<String, List<InbodyRecord>> getInbodyReport(Site site, String mobile, Principal coach, Date from, Date to);
    
    /**
     * 
     * @param sites
     * @param mobile
     * @param coach
     * @param from
     * @param to
     * @return
     */
    public Map<String, List<InbodyRecord>> getInbodyReport(List<Site> sites, String mobile, Principal coach, Date from, Date to);
    
    /**
     * 
     * @param site
     * @param mobile
     * @param coach
     * @param from
     * @param to
     * @return
     */
    public Map<String, Object> getInbodyReportExport(Site site, String mobile, Principal coach, Date from, Date to);
    
    /**
     * 
     * @param sites
     * @param mobile
     * @param coach
     * @param from
     * @param to
     * @return
     */
    public Map<String, Object> getInbodyReportExport(List<Site> sites, String mobile, Principal coach, Date from, Date to);
    
    /**
     * 
     * @param site
     * @param mobile
     * @param coach
     * @param from
     * @param to
     * @return
     */
    public Map<String, List<BwhRecord>> getBwhReport(Site site, String mobile, Principal coach, Date from, Date to);
    
    /**
     * 
     * @param sites
     * @param mobile
     * @param coach
     * @param from
     * @param to
     * @return
     */
    public Map<String, List<BwhRecord>> getBwhReport(List<Site> sites, String mobile, Principal coach, Date from, Date to);
    
    /**
     * 
     * @param day
     * @return
     */
    public List<TasteStatSingle> listTasteStatQuestion(Date day);
    
    /**
     * 
     * @param day
     * @return
     */
    public List<TasteStatSingle> listMonthTasteStatQuestion(Date day);
    
    /**
     * 
     * @param day
     * @return
     */
    public List<TasteStatSingle> listTasteStatProfile(Date day);
    
    /**
     * 
     * @param day
     * @return
     */
    public List<TasteStatSingle> listMonthTasteStatProfile(Date day);
    
    /**
     * 
     * @param day
     * @return
     */
    public List<TasteStatSingle> listTasteStatOrder(Date day);
    
    /**
     * 
     * @param day
     * @return
     */
    public List<TasteStatSingle> listMonthTasteStatOrder(Date day);
    
    /**
     * 
     * @param source
     * @param day
     * @return
     */
    public List<TasteStat> listTasteStat(String source, Date day);
    
    /**
     * 
     * @param source
     * @param day
     * @return
     */
    public List<TasteStatEveryDay> listTasteStatEveryDay(String source, Date day);
    
    /**
     * 
     * @param day
     * @return
     */
    public List<TasteSignUp> listTasteSignUp(String source, Date day);
    
    /**
     * 
     * @param source
     * @param begin
     * @param end
     * @return
     */
    public List<TasteSignUp> listTasteSignUp(String source, Date begin, Date end);
    
    /**
     * 
     * @return
     */
    public List<String> listTasteStatSource();
    
    /**
     * 
     * @param tasteSignUp
     */
    public void addService(TasteSignUp tasteSignUp);
    
    /**
     * 
     * @param source
     * @param day
     * @param period
     * @return
     */
    public int countBMIQuestion(String source, Date day, String period);
    
    /**
     * 
     * @param source
     * @param begin
     * @param end
     * @return
     */
    public int countBMIQuestion(String source, Date begin, Date end);
    
    /**
     * 
     * @param source
     * @param day
     * @param period
     * @return
     */
    public int countTasteSignUp(String source, Date day, String period);
    
    /**
     * 
     * @param source
     * @param begin
     * @param end
     * @return
     */
    public int countTasteSignUp(String source, Date begin, Date end);
    
    /**
     * 
     * @param source
     * @param day
     * @param period
     * @return
     */
    public int countOrder(String source, Date day, String period);
    
    /**
     * 
     * @param source
     * @param begin
     * @param end
     * @return
     */
    public int countOrder(String source, Date begin, Date end);
    
    /**
     * 
     * @param begin
     * @param end
     * @param site
     * @return
     */
    public int countFinishedCourse(Date begin, Date end, Site site);
    
    /**
     * 
     * @param begin
     * @param end
     * @param sites
     * @return
     */
    public int countFinishedCourse(Date begin, Date end, List<Site> sites);
    
    /**
     * 
     * @return
     */
    public List<Course> listOfflineCourse();
    
    /**
     * 
     * @param begin
     * @param end
     * @param site
     * @return
     */
    public Map<Long, Long> listFinishedCourseCount(Date begin, Date end, Site site);
    
    /**
     * 
     * @param begin
     * @param end
     * @param site
     * @return
     */
    public List<CourseRound> listFinishedCourseRound(Date begin, Date end, Site site);
    
    /**
     * 
     * @param begin
     * @param end
     * @param sites
     * @return
     */
    public List<CourseRound> listFinishedCourseRound(Date begin, Date end, List<Site> sites);
    
    /**
     * 
     * @param site
     * @param date
     * @param period
     * @return
     */
    public List<StudentUnitPrice> listStudentUnitPrice(Site site, Date date, String period);
    
    /**
     * 
     * @param sites
     * @param date
     * @param period
     * @return
     */
    public List<StudentUnitPrice> listStudentUnitPrice(List<Site> sites, Date date, String period);
    
    /**
     * 
     * @param date
     * @param period
     * @return
     */
    public StudentUnitPrice getStudentUnitPrice(Date date, String period);
    
    /**
     * 
     * @param sites
     * @param date
     * @param period
     * @return
     */
    public StudentUnitPrice getStudentUnitPrice(List<Site> sites, Date date, String period);
    
    /**
     * 
     * @param site
     * @param date
     * @param period
     * @return
     */
    public List<StudentCourseRoundStat> listStudentCourseRoundStat(Site site, Date date, String period);
    
    /**
     * 
     * @param sites
     * @param date
     * @param period
     * @return
     */
    public List<StudentCourseRoundStat> listStudentCourseRoundStat(List<Site> sites, Date date, String period);
    
    /**
     * 
     * @param site
     * @param date
     * @param period
     * @return
     */
    public List<CourseRound> listCourseRound(Site site, Date date, String period);
    
    /**
     * 
     * @param sites
     * @param date
     * @param period
     * @return
     */
    public List<CourseRound> listCourseRound(List<Site> sites, Date date, String period);
    
    /**
     * 
     * @param site
     * @param begin
     * @param end
     * @return
     */
    public List<StudentUnitPrice> listStudentUnitPrice(Site site, Date begin, Date end);
    
    /**
     * 
     * @param sites
     * @param begin
     * @param end
     * @return
     */
    public List<StudentUnitPrice> listStudentUnitPrice(List<Site> sites, Date begin, Date end);
    
    /**
     * 
     * @param begin
     * @param end
     * @return
     */
    public StudentUnitPrice getStudentUnitPrice(Date begin, Date end);
    
    /**
     * 
     * @param sites
     * @param begin
     * @param end
     * @return
     */
    public StudentUnitPrice getStudentUnitPrice(List<Site> sites, Date begin, Date end);
    
    /**
     * 
     * @param site
     * @param begin
     * @param end
     * @return
     */
    public List<CourseRound> listCourseRound(Site site, Date begin, Date end);
    
    /**
     * 
     * @param sites
     * @param begin
     * @param end
     * @return
     */
    public List<CourseRound> listCourseRound(List<Site> sites, Date begin, Date end);
    
    /**
     * 
     * @param site
     * @param begin
     * @param end
     * @return
     */
    public List<StudentCourseRoundStat> listStudentCourseRoundStat(Site site, Date begin, Date end);
    
    /**
     * 
     * @param sites
     * @param begin
     * @param end
     * @return
     */
    public List<StudentCourseRoundStat> listStudentCourseRoundStat(List<Site> sites, Date begin, Date end);
    
    /**
     * 
     * @param site
     * @param date
     * @param period
     * @return
     */
    public List<HourUnitPrice> listHourUnitPrice(Site site, Date date, String period);
    
    /**
     * 
     * @param sites
     * @param date
     * @param period
     * @return
     */
    public List<HourUnitPrice> listHourUnitPrice(List<Site> sites, Date date, String period);
    
    /**
     * 
     * @param date
     * @param period
     * @return
     */
    public HourUnitPrice getHourUnitPrice(Date date, String period);
    
    /**
     * 
     * @param sites
     * @param date
     * @param period
     * @return
     */
    public HourUnitPrice getHourUnitPrice(List<Site> sites, Date date, String period);
    
    /**
     * 
     * @param site
     * @param begin
     * @param end
     * @return
     */
    public List<HourUnitPrice> listHourUnitPrice(Site site, Date begin, Date end);
    
    /**
     * 
     * @param sites
     * @param begin
     * @param end
     * @return
     */
    public List<HourUnitPrice> listHourUnitPrice(List<Site> sites, Date begin, Date end);
    
    /**
     * 
     * @param begin
     * @param end
     * @return
     */
    public HourUnitPrice getHourUnitPrice(Date begin, Date end);
    
    /**
     * 
     * @param sites
     * @param begin
     * @param end
     * @return
     */
    public HourUnitPrice getHourUnitPrice(List<Site> sites, Date begin, Date end);
    
    /**
     * 
     * @param courseType
     * @param site
     * @param date
     * @param period
     * @return
     */
    public List<SiteHour> listSiteHour(CourseType courseType, Site site, Date date, String period);
    
    /**
     * 
     * @param courseType
     * @param sites
     * @param date
     * @param period
     * @return
     */
    public List<SiteHour> listSiteHour(CourseType courseType, List<Site> sites, Date date, String period);
    
    /**
     * 
     * @param courseType
     * @param date
     * @param period
     * @return
     */
    public int getSiteHour(CourseType courseType, Date date, String period);
    
    /**
     * 
     * @param courseType
     * @param sites
     * @param date
     * @param period
     * @return
     */
    public int getSiteHour(CourseType courseType, List<Site> sites, Date date, String period);
    
    /**
     * 
     * @param courseType
     * @param site
     * @param date
     * @param period
     * @return
     */
    public List<SiteHourStat> listSiteHourStat(CourseType courseType, Site site, Date date, String period);
    
    /**
     * 
     * @param courseType
     * @param sites
     * @param date
     * @param period
     * @return
     */
    public List<SiteHourStat> listSiteHourStat(CourseType courseType, List<Site> sites, Date date, String period);
    
    /**
     * 
     * @param courseType
     * @param date
     * @param period
     * @return
     */
    public List<SiteHour> listSiteHour(CourseType courseType, Site site, Date begin, Date end);
    
    /**
     * 
     * @param courseType
     * @param sites
     * @param begin
     * @param end
     * @return
     */
    public List<SiteHour> listSiteHour(CourseType courseType, List<Site> sites, Date begin, Date end);
    
    /**
     * 
     * @param courseType
     * @param begin
     * @param end
     * @return
     */
    public int getSiteHour(CourseType courseType, Date begin, Date end);
    
    /**
     * 
     * @param courseType
     * @param sites
     * @param begin
     * @param end
     * @return
     */
    public int getSiteHour(CourseType courseType, List<Site> sites, Date begin, Date end);
    
    /**
     * 
     * @param courseType
     * @param site
     * @param begin
     * @param end
     * @return
     */
    public List<SiteHourStat> listSiteHourStat(CourseType courseType, Site site, Date begin, Date end);
    
    /**
     * 
     * @param courseType
     * @param sites
     * @param begin
     * @param end
     * @return
     */
    public List<SiteHourStat> listSiteHourStat(CourseType courseType, List<Site> sites, Date begin, Date end);
    
    /**
     * 
     * @param courseType
     * @param site
     * @param begin
     * @param end
     * @return
     */
    public List<CourseSchedule> listCourseSchedule(CourseType courseType, Site site, Date begin, Date end);
    
    /**
     * 
     * @param courseType
     * @param sites
     * @param begin
     * @param end
     * @return
     */
    public List<CourseSchedule> listCourseSchedule(CourseType courseType, List<Site> sites, Date begin, Date end);
    
    /**
     * 
     * @param search
     * @return
     */
    public List<CourseRound> search(SigninReportSearch search);
    
    /**
     * 在营学员报表-统计
     * @param site
     * @param coach
     * @return
     */
    public List<UnfinishedRoundReport> listUnfinishedRoundStat(Site site, Principal coach);
    
    /**
     * 
     * @param sites
     * @param coach
     * @return
     */
    public List<UnfinishedRoundReport> listUnfinishedRoundStat(List<Site> sites, Principal coach);
    
    /**
     * 列出在营学员
     * @param site
     * @param coach
     * @return
     */
    public List<CourseRound> listUnfinishedRound(Site site, Principal coach);
    
    /**
     * 
     * @param sites
     * @param coach
     * @return
     */
    public List<CourseRound> listUnfinishedRound(List<Site> sites, Principal coach);
    
    /**
     * 列出在营学员标签
     * @param courseRounds
     * @return
     */
    public Map<Long, String> listTags(List<CourseRound> courseRounds);
    
    /**
     * 列出在营学员饮食课件完成情况
     * @param sites
     * @param coach
     * @return
     */
    public Map<Long, Integer> listDietary(List<Site> sites, Principal coach);
    
    /**
     * 列出在营学员家庭作业课件完成情况
     * @param sites
     * @param coach
     * @return
     */
    public Map<Long, Integer> listHomework(List<Site> sites, Principal coach);
    
    /**
     * 列出在营学员门店训练课件完成情况
     * @param sites
     * @param coach
     * @return
     */
    public Map<Long, Integer> listPlannedSchedule(List<Site> sites, Principal coach);
    
    /**
     * 列出在营学员课程课件完成情况
     * @param sites
     * @param coach
     * @return
     */
    public Map<Long, Long> listCourse(List<Site> sites, Principal coach);
    
    /**
     * 统计在营学员课程当天取消课程数
     * @param sites
     * @param coach
     * @param begin
     * @param end
     * @return
     */
    public Map<Long, Long> listScheduleCancelStat(List<Site> sites, Principal coach, Date begin, Date end);
    
    /**
     * 统计在营学员最后上课日期
     * @param sites
     * @param coach
     * @return
     */
    public Map<Long, Date> listLatestScheduleTime(List<Site> sites, Principal coach);
    
    /**
     * 
     * @param sites
     * @param coach
     * @return
     */
    public Map<Long, Map<String, Object>> listContrastPhoto(List<Site> sites, Principal coach);
    
    /**
     * 
     * @param begin
     * @param end
     * @param site
     * @return
     */
    public List<CourseRoundResult> listCourseRoundResult(Date begin, Date end, Site site);
    
    /**
     * 
     * @param begin
     * @param end
     * @param sites
     * @return
     */
    public List<CourseRoundResult> listCourseRoundResult(Date begin, Date end, List<Site> sites);

    /**
     * 
     * @param begin
     * @param end
     * @param site
     * @return
     */
    public Map<Long, Long> listMultipleOrder(Date begin, Date end, Site site);
    
    /**
     * 
     * @param begin
     * @param end
     * @param sites
     * @return
     */
    public Map<Long, Long> listMultipleOrder(Date begin, Date end, List<Site> sites);
    
    /**
     * 
     * @param begin
     * @param end
     * @param site
     * @return
     */
    public Map<Long, Long> countFinishedStudent(Date begin, Date end, Site site);
    
    /**
     * 
     * @param begin
     * @param end
     * @param sites
     * @return
     */
    public Map<Long, Long> countFinishedStudent(Date begin, Date end, List<Site> sites);
    
    /**
     * 
     * @param site
     * @return
     */
    public Map<Long, Long> countMultipleOrderBySite(Date begin, Date end, Site site);
    
    /**
     * 
     * @param sites
     * @return
     */
    public Map<Long, Long> countMultipleOrderBySite(Date begin, Date end, List<Site> sites);
    
    /**
     * 
     * @param begin
     * @param end
     * @param site
     * @return
     */
    public List<Goal> listGoal(Date begin, Date end, Site site);
    
    /**
     * 
     * @param begin
     * @param end
     * @param sites
     * @return
     */
    public List<Goal> listGoal(Date begin, Date end, List<Site> sites);
    
    /**
     * 
     * @param begin
     * @param end
     * @param site
     * @return
     */
    Map<Long, Map<String, Object>> listTarget(Date begin, Date end, Site site);
    
    /**
     * 
     * @param begin
     * @param end
     * @param sites
     * @return
     */
    Map<Long, Map<String, Object>> listTarget(Date begin, Date end, List<Site> sites);
    
    /**
     * 
     * @param sites
     * @param coach
     * @return
     */
    public List<UnfinishedRoundChange> listUnfinishedRoundChange(List<Site> sites, Principal coach);

    /**
     * 
     * @param begin
     * @param end
     * @param site
     * @return
     */
    public Map<Long, Map<String, Object>> listContrastPhoto(Date begin, Date end, Site site);

    /**
     * 
     * @param begin
     * @param end
     * @param sites
     * @return
     */
    public Map<Long, Map<String, Object>> listContrastPhoto(Date begin, Date end, List<Site> sites);

    /**
     * 在营课程变化及对比照
     * @param sites
     * @param coach
     * @return
     */
    public Map<Long, CourseRoundResult> mapCourseRoundResult(List<Site> sites, Principal coach);

    /**
     * 
     * @param begin
     * @param end
     * @param site
     * @return
     */
    public List<StudentTargetData> listStudentTargetData(Date begin, Date end, Site site);

    /**
     * 
     * @param begin
     * @param end
     * @param sites
     * @return
     */
    public List<StudentTargetData> listStudentTargetData(Date begin, Date end, List<Site> sites);

    /**
     * 
     * @param sites
     * @param coach
     * @return
     */
    public List<StudentTargetData> listStudentTargetData(List<Site> sites, Principal coach);
    
    /**
     * 
     * @return
     */
    public List<CourseRoundAttribute> listDelayRecord(Date now);
}
